iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
佛心分享-SideProject30

從0開始—初階程式語言學習者的必經之路系列 第 21

DAY21💥✨加入特效(利用找找看遊戲延伸)

  • 分享至 

  • xImage
  •  

之前迷宮及找找看使用到類似的方法、語法撰寫如GUI、隨即生成等,但似乎未加上特效的介紹,今天就來加上一些閃爍的特效吧~

###可以考慮使用 Swing 的 Timer 來製作簡單的動畫效果,例如按鈕點擊後閃爍、背景顏色改變等。

1.擴展程式碼:增加按鈕閃爍特效

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class FindTheTreasureGameWithEffects extends JFrame {
    private JButton[] buttons;
    private int treasureIndex;

    public FindTheTreasureGameWithEffects() {
        setTitle("找找看遊戲 - 特效版");
        setSize(400, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new GridLayout(4, 4));

        buttons = new JButton[16];
        Random random = new Random();
        treasureIndex = random.nextInt(16); // 隨機選擇一個按鈕作為寶藏

        for (int i = 0; i < 16; i++) {
            buttons[i] = new JButton("?");
            buttons[i].setFont(new Font("Arial", Font.BOLD, 20));
            buttons[i].setFocusPainted(false);
            buttons[i].setBackground(Color.LIGHT_GRAY);
            buttons[i].addActionListener(new ButtonClickListener(i));
            add(buttons[i]);
        }
    }

    private class ButtonClickListener implements ActionListener {
        private int index;

        public ButtonClickListener(int index) {
            this.index = index;
        }

        @Override
        public void actionPerformed(ActionEvent e) {
            if (index == treasureIndex) {
                buttons[index].setText("寶藏!");
                triggerFlashEffect(buttons[index], Color.YELLOW, 3, 300); // 觸發閃爍特效
                JOptionPane.showMessageDialog(null, "恭喜,你找到了寶藏!");
            } else {
                buttons[index].setText("空的");
                triggerFlashEffect(buttons[index], Color.RED, 2, 300); // 觸發閃爍特效
            }
        }
    }

    // 方法:觸發按鈕閃爍特效
    private void triggerFlashEffect(JButton button, Color flashColor, int flashes, int delay) {
        Timer timer = new Timer(delay, new ActionListener() {
            private int count = 0;
            private boolean isOriginalColor = true;
            private Color originalColor = button.getBackground();

            @Override
            public void actionPerformed(ActionEvent e) {
                if (count < flashes * 2) { // 每次閃爍包括一次顏色改變和恢復
                    button.setBackground(isOriginalColor ? flashColor : originalColor);
                    isOriginalColor = !isOriginalColor;
                    count++;
                } else {
                    button.setBackground(originalColor); // 結束時恢復原顏色
                    ((Timer) e.getSource()).stop(); // 停止計時器
                }
            }
        });
        timer.start();
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            FindTheTreasureGameWithEffects game = new FindTheTreasureGameWithEffects();
            game.setVisible(true);
        });
    }
}

程式介紹

  1. 閃爍特效邏輯⭐️

    • 我們使用了 javax.swing.Timer 來實現按鈕的閃爍特效。Timer 是一個定時器,它會以固定的間隔觸發指定的動作。這裡我們設定每 300 毫秒觸發一次事件,使按鈕的背景顏色在預定的次數內來回切換。
    • triggerFlashEffect() 方法接受四個參數:按鈕、閃爍顏色、閃爍次數和每次閃爍的間隔時間。這個方法會創建一個 Timer,每次觸發時會切換按鈕的背景顏色,直到完成指定的閃爍次數。
  2. 按鈕點擊後的效果✨

    • 當按鈕被點擊時,如果玩家點擊的是寶藏按鈕,則按鈕會閃爍黃色,並顯示「寶藏!」字樣。如果玩家點擊的是其他按鈕,按鈕會閃爍紅色,表示「空的」。
  3. 可配置的特效🪩

    • 閃爍的顏色、次數和速度可以通過調整 triggerFlashEffect() 的參數來更改。這樣可以根據遊戲的需求來設計不同的視覺反饋效果。

上一篇
DAY20結合過往所學-隨即生成及界面製作的找找看遊戲
下一篇
DAY22🤖機器人動作!與Java程式的結合
系列文
從0開始—初階程式語言學習者的必經之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言